모듈:BattleEntry
local p = {} -- Dependencies local getArgs = getArgs or require( 'Module:Arguments' ).getArgs local color = color or require( 'Module:Color' ) local scheme = scheme or mw.loadData( 'Module:Color/Scheme' ) local typeScheme = typeScheme or scheme.types local moveScheme = moveScheme or scheme.moves local pokedex = pokedex or require( 'Module:Pokedex' ) -- Common variables local args local game local generation local types, colorSet = {}, {} local options = { animatedImage = false, gender = true, ability = true, item = true, skillCategory = true } local blankStr = '' local entry -- 출력할 HTML -- 게임 약어 데이터 (도트이미지에 필요) local gameAbbr = { '적' = '적녹', '녹' = '적녹', '적녹' = '적녹', '청' = '청', '옐로' = '옐로', '피카츄' = '피카', '금' = '금', '은' = '은', '크리스탈' = '크리스', '크' = '크리스', '루비' = '루사', '루' = '루사', '사파이어' = '루사', '사' = '루사', '루사' = '루사', '에메랄드' = '에메', '에메' = '에메', '파레' = '파레리그', '리그' = '파레리그', '파레리그' = '파레리그', '파리' = '파레리그', '다이아몬드' = '다펄', '다' = '다펄', '펄' = '다펄', '다펄' = '다펄', '플라티나' = '플라', '플라' = '플라', '플' = '플라', '하트골드' = '하골소실', '하골' = '하골소실', '소울실버' = '하골소실', '소실' = '하골소실', '하골소실' = '하골소실', '하소' = '하골소실', '블화' = '블화', '블랙' = '블화', '화이트' = '블화', '블화2' = '블화2', '블랙2' = '블화2', '화이트2' = '블화2', } local suffixes = { shiny = '_색다른', female = '_암컷' } local genderFormat = { '수' = '♂', '암' = '♀' } genderFormat'랜덤' = genderFormat'수' .. '/' .. genderFormat'암' --- getColorSet(): 타입에 맞는 색상표를 픽업 -- @param typeName{str} local function getColorSet( key, colorTbl ) local colorSet = blankStr if colorTblkey then colorSet = colorTblkey end return colorSet end --- setLeftColumn(): 좌측 열의 기본 데이터를 구성 local function setLeftColumn() local container = mw.html.create( 'div' ) local tbl = mw.html.create( 'table' ) local pGame, pIndex, pName, pGender, pLevel, pType, pAbil, pItem local image, imageExtension, suffixFemale, suffixShiny, shinyIcon container :addClass( 'float-left' ) :node( tbl ) -- 게임 데이터 처리 pGame = game ~= blankStr and game .. '_' or game -- 번호, 데이터 처리 if args'번호' then pIndex = args'번호' pName = pokedex.getName( pIndex ) else pIndex = blankStr pName = blankStr end -- 성별 데이터 처리 pGender = args'성별' pGender = genderFormatpGender or blankStr suffixFemale = args'도트성별' '암' and suffixes.female or blankStr -- 레벨 데이터 처리 pLevel = args'레벨' or '??' -- 이로치 데이터 처리 if args'이로치' then suffixShiny = suffixes.shiny shinyIcon = '파일:블화 이로치.png' else suffixShiny = blankStr shinyIcon = blankStr end -- 이미지 데이터 imageExtension = options.animatedImage true and '.gif' or '.png' image = '파일:도트_' .. generation .. pGame .. pIndex .. suffixFemale .. suffixShiny .. imageExtension .. '' -- 표 속성 정의 tbl :addClass( 'w-100' ) :css( 'border-spacing', 0 ) -- 이미지 셀 추가 :tag( 'tr' ) :tag( 'td' ) :attr( 'colspan', 2 ) :addClass( 'bg-white text-center' ) :css({ 'border-radius' = '5px', 'width' = '150px', 'height' = '130px' }) :wikitext( image .. ' '.. pName ..' ' .. pGender .. ' Lv.' .. pLevel .. shinyIcon ) -- 거터 추가 tbl :tag( 'tr' ) :tag( 'td' ) :attr( 'colspan', 2 ) :css( 'height', '5px' ) -- 타입, 특성, 도구 행 추가 local function addDataRow( thData, tdData ) local row = tbl:tag( 'tr' ):addClass( 'align-top' ) thData = thData .. ':' row :tag( 'th' ) :addClass( 'text-smaller font-weight normal' ) :wikitext( thData ) row :tag( 'td' ) :wikitext( tdData ) end -- 타입 추가 pType = '' .. color.toTypeLink( types1, types2 ) .. '' addDataRow( '타입', pType ) -- 특성 추가 if options.ability true then local abilities = { args'특성1', args'특성2' } if #abilities 0 then pAbil = '특성 없음' else pAbil = blankStr for i = 1, #abilities do pAbil = pAbil .. ' ' .. color.toLink( '111', abilitiesi ) .. ' ' end end addDataRow( '특성', pAbil ) end -- 도구 추가 if options.item true then local item = args'도구' if item then pItem = '파일:도트_아이콘_' .. item .. '.png' .. color.toLink( '111', item ) else pItem = '도구 없음' end addDataRow( '도구', pItem ) end entry:node( container ) end --- addSkill(): 기술표를 추가 local function addSkill( data, index ) local tbl = mw.html.create( 'table' ) local sName, sType, sCat = data1, data2, data3 local sNameFormat, sTypeFormat, sCatFormat = '', '', '' local typeColor = getColorSet( sType, typeScheme )2 local catColor = getColorSet( sCat, moveScheme )2 local margin = index 1 and 0 or '5px 0 0' if sName then sNameFormat = color.toLink( '111', sName ) end if sType then sTypeFormat = color.toTypeLink( sType ) end if sCat then sCatFormat = color.toMoveText( sCat ) end tbl :addClass( 'w-100 bg-white' ) :css({ 'border' = '2px solid ' .. typeColor, 'border-radius' = '5px', 'border-spacing' = 0, 'margin' = margin }) local firstRowCell = tbl:tag( 'tr' ):tag( 'td' ) local secondRow = tbl:tag( 'tr' ):css( 'font-size', '12px' ) firstRowCell :css( 'padding', '.2em 0' ) :wikitext( sNameFormat ) secondRow :tag( 'td' ) :wikitext( sTypeFormat ) if options.skillCategory true then firstRowCell :attr( 'colspan', 2 ) secondRow :tag( 'td' ) :wikitext( sCatFormat ) end return tbl end --- setRightColumn(): 우측 열의 기술표를 구성 local function setRightColumn() local container = mw.html.create( 'div' ) local skills = {} container :addClass( 'float-left text-center' ) :css({ margin = '0 0 0 5px', width = '10em' }) for k, v in pairs( args ) do local cat, num = tostring( k ):match('^(기술.*)(1-9%d*)$') num = tonumber( num ) if cat and not skillsnum then skillsnum = {} end if cat '기술' then skillsnum1 = v elseif cat '기술타입' then skillsnum2 = v elseif cat '기술분류' then skillsnum3 = v end end for i = 1, #skills do local skill = addSkill( skillsi, i ) container:node( skill ) end entry:node( container ) end --- buildOut(): 출력할 HTML을 구성 local function buildOut() entry = mw.html.create( 'div' ) :addClass( 'mb-1 rounded group' ) :css({ background = colorSet11, border = '3px solid ' .. colorSet22, padding = '5px', display = 'table' }) setLeftColumn() setRightColumn() end -- processArgs(): 파라미터를 프로세스 local function processArgs() -- 세대에 따라 옵션 변경 generation = args'세대' or '7' local _generation = tonumber( generation ) if _generation < 2 then options.gender = false options.item = false end if _generation < 3 then options.ability = false end if _generation < 4 then options.skillCategory = false end -- 게임타이틀에 따라 옵션 변경 local _game = args'게임' game = gameAbbr_game or blankStr if game '크리스' then options.animatedImage = true end if game '에메' then options.animatedImage = true end if game '블화2' then options.animatedImage = true end -- 타입 데이터를 이용해 색상표 정의 types1 = args'타입1' or '???' types2 = args'타입2' or types1 for i = 1, #types do colorSeti = getColorSet( typesi, typeScheme ) end end -- Main function function p.main( frame ) args = getArgs( frame ) processArgs() -- 파라미터를 프로세스 buildOut() -- 출력할 HTML을 구성 return entry:done() end return p